package com.shuqi.activity.viewport;

import android.content.Context;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.shuqi.controller.R;

/***
 * 初始化后传入listener后可用 不能使用配置文件使用该view <br>
 * 使用流程：<b>请在UI线程调用Footer的各个方法</b> <br>
 * 初始化 <br>
 * 1：ListView在setAdapter之前设置Footer <br>
 * 2：如果需要添加FooterDivider调用：addFooterTopLine(); <br>
 * 状态改变 <br>
 * 3：在联网加载数据前调用：loadingStart(); <br>
 * 4：在联网加载数据完成后调用：loadingSuccess(); <br>
 * 5：在联网加载数据失败是调用：loadingError();
 * 
 * @author yanghuawei
 */
public class MyListFooter extends LinearLayout implements View.OnClickListener {

    /** 当前的状态 */
    private int loadingState;

    /** 展示：已加载完毕 */
    private final int FOOTERSTATE_NONE = -100;
    /** 展示：点击加载更多 */
    private final int FOOTERSTATE_LOADMORE = -101;
    /** 展示：加载中 */
    private final int FOOTERSTATE_LOADING = -102;
    /** 展示：重新加载 */
    private final int FOOTERSTATE_RELOAD = -103;
    /** 隐藏load */
    private final int FOOTERSTATE_GONE = -104;

    private View footer;
    private TextView button;
    private View loading;
    private View topLine;

    /** 加载列表事件 */
    private MyFooterListener listener;

    /***
     * listView的Footer
     * 
     * @param context
     * @param listener 必须添加的回调
     */
    public MyListFooter(Context context, MyFooterListener listener) {
        super(context);
        this.listener = listener;
        View view = LayoutInflater.from(context).inflate(R.layout.view_common_footer, this, false);
        addView(view);
        initViews();
        loadingInit();
        // initAutoLoad();
    }

    /** 初始化footerView内部控件以及设置点击事件 */
    private void initViews() {
        footer = findViewById(R.id.view_common_footer_ll);
        loading = findViewById(R.id.view_common_footer_loading);
        topLine = findViewById(R.id.view_common_footer_topLine);
        button = (TextView) findViewById(R.id.view_common_footer_button);

        button.setOnClickListener(this);
        footer.setOnClickListener(this);
    }

    /**
     * 当listView显示不出dividerLine时，可以添加footer自身的顶部的线
     */
    public void addFooterTopLine() {
        topLine.setVisibility(View.VISIBLE);
    }

    /** 初始化footer状态 */
    private void loadingInit() {
        changState(FOOTERSTATE_LOADMORE);
    }

    /** 开始加载数据 */
    public void loadingStart() {
        changState(FOOTERSTATE_LOADING);
    }

    /**
     * 隐藏load
     */
    public void goneLoad() {
        changState(FOOTERSTATE_GONE);
    }

    /** 加载数据完成 */
    public void loadingSuccess() {
        if (listener.hasNext()) {
            changState(FOOTERSTATE_LOADMORE);
        } else {
            changState(FOOTERSTATE_NONE);
        }
    }

    /** 加载数据出错 */
    public void loadingError() {
        changState(FOOTERSTATE_RELOAD);
    }

    /** 改变当前的footer状态 */
    private void changState(int footerState) {
        footer.setVisibility(View.VISIBLE);
        button.setVisibility(View.VISIBLE);
        loading.setVisibility(View.GONE);
        loadingState = footerState;
        switch (footerState) {
            case FOOTERSTATE_NONE:
                button.setBackgroundColor(Resources.getSystem().getColor(
                        android.R.color.transparent));
                button.setText("已加载全部");
                button.setEnabled(false);
                break;
            case FOOTERSTATE_LOADMORE:
                button.setText("点击加载更多");
                break;
            case FOOTERSTATE_LOADING:
                button.setVisibility(View.GONE);
                loading.setVisibility(View.VISIBLE);
                break;
            case FOOTERSTATE_RELOAD:
                button.setText("点击重新加载");
                break;
            case FOOTERSTATE_GONE:
                button.setVisibility(View.GONE);
                loading.setVisibility(View.GONE);
                break;
            default:
                footer.setVisibility(View.GONE);
                break;
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.view_common_footer_button:
                if (listener != null) {
                    if (loadingState == FOOTERSTATE_LOADING) {

                    } else if (loadingState == FOOTERSTATE_LOADMORE) {
                        if (listener.hasNext()) {
                            listener.loadNext();
                        }
                    } else if (loadingState == FOOTERSTATE_RELOAD) {
                        if (listener.hasNext()) {
                            listener.reload();
                        }
                    } else if (loadingState == FOOTERSTATE_NONE) {

                    } else {

                    }
                }
                break;
        }
    }

    public interface MyFooterListener {
        /** 联网失败后重新加载list数据 */
        void reload();

        /** 可以联网加载下一页list数据 */
        void loadNext();

        /** 是否还有下一页 */
        boolean hasNext();
    }

    // 使用自动加载更多功能
    // ListView getListView();
    // 【滚到底部：自动加载功能】

    // /**初始化自动加载功能*/
    // private void initAutoLoad(){
    // if(listener!=null){
    // ListView listView = listener.getListView();
    // if(listView!=null){
    // listView.setOnScrollListener(new OnScrollListener() {
    // @Override
    // public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
    // int totalItemCount) {
    // if(!isAutoLoad()){
    // return;
    // }
    // if (visibleItemCount > 0 && (firstVisibleItem + visibleItemCount == totalItemCount)
    // && !isLoading() && !isLoadError()) {
    // if (listener.hasNext()) {
    // changState(FOOTERSTATE_LOADING);
    // listener.loadNext();
    // } else {
    // changState(FOOTERSTATE_NONE);
    // }
    // }
    // }
    // @Override
    // public void onScrollStateChanged(AbsListView view, int scrollState) {}
    // });
    // }
    // }
    // }
    // /**判断是否正在加载*/
    // private boolean isLoading(){
    // return loadingState == FOOTERSTATE_LOADING;
    // }
    // /**判断是否加载失败*/
    // private boolean isLoadError(){
    // return loadingState == FOOTERSTATE_RELOAD;
    // }
    // /**判断是否开启自动加载更多功能*/
    // private boolean isAutoLoad(){
    // return true;
    // }
}
